Title Banner


Technotes


Font Height Tables



Technote TE 22April 1986



Revised by: March 1988
Written by: Gene Pope April 1986

This technical note describes how the Font Manager (except in 64K ROMs) calculates height tables for fonts and how you can force recalculation.


In order to expedite the processing of fonts, the Font Manager (in anything newer than the 64K ROMs) calculates a height table for all of the characters in a font when the font is first loaded into memory. This height table is then appended to the end of the font resource in memory; if some program (such as a font editor) subsequently saves the font, the height table will be saved with the font and will not have to be built again. This is fine for most cases except, for example, when the tables really should be recalculated, such as in a font editor when the ascent and/or descent have changed.

The following is an example of how to eliminate the height table from a font:

	IF (BitAnd(hStrike^^.fontTyp,$1)=1) THEN BEGIN {We have a height table}
	   {Truncate the height table}
	   SetHandleSize(Handle(hStrike),GetHandleSize(Handle(hStrike)-
	                 (2*(hStrike^^.lastChar-hStrike^^.firstChar)+3)));
	   {We no longer have a height table so set the flag to indicate that}
	   hStrike^^.format := BitAnd(hStrike^^.fontType,$FFFFFFFE);
	END;
In MPW C:
	if ((**hStrike).fontType & 0x1 ==1) { /*We have a height table*/
	   /*Truncate the height table*/
	   SetHandleSize((Handle)hStrike,GetHandleSize((Handle)hStrike)-
	                 (2*((**hStrike).lastChar-(**hStrike).firstChar)+3));
	   /*We no longer have a height table so set the flag to indicate that*/
	   (**hStrike).fontType = (**hStrike).fontType & 0xFFFFFFFE;
	}

where hStrike is a handle to the `FONT' or `NFNT' resource (handle to a FontRec).

Note: After the height table has been eliminated, the modified font should be saved to disk (with ChangedResource and WriteResource) and purged from memory (using ReleaseResource). This is an important step, because the Font Manager does not expect other code to go behind its back removing height tables that it has calculated.

Further Reference:



Tech Support
Technotes
Previous Technote | Contents | Next Technote


Navigation graphic, see text links

Main | Page One | What's New | Apple Computer, Inc. | Find It | Contact Us | Help